package 算法基础模板.chapter_01.双指针;

import java.util.Scanner;

/**
 * 双指针算法
 *
 * <blockquote><pre>{@code
 *
 * for (int i = 0, j = 0; i < n; i ++ ){
 *      while (j < i && check(i, j)) j ++ ;
 *      // 具体问题的逻辑
 * }
 * }</pre></blockquote>

 * 常见问题分类：
 * (1) 对于一个序列，用两个指针维护一段区间
 * (2) 对于两个序列，维护某种次序，比如归并排序中合并两个有序序列的操作
 *
 * @author Summerday
 */
public class TwoPointsT {

    static int n;
    static int[] nums; // 1 2 2 3 5
    static int[] cnt;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        n = scanner.nextInt();
        nums = new int[n];
        cnt = new int[100010]; // 记录每个数 出现的次数
        for (int i = 0; i < n; i++) nums[i] = scanner.nextInt();
        int res = 0;
        for (int i = 0, j = 0; i < n; i++) {
            cnt[nums[i]]++;
            while (cnt[nums[i]] > 1) { // 说明有重复
                cnt[nums[j]]--; // 把 j拿出去
                j++;
            }
            // 循环结束之后, [i, j]之间就没有重复元素了
            res = Math.max(res, i - j + 1);
        }
        System.out.println(res);
    }

}
